package com.shrct.businessprocess.product;

import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.product.RCProductPurchaseInfoDeliverTarget;
import com.shrct.businessprocess.product.impl.RCProductPurchaseInfoImpl;
import com.shrct.businessprocess.product.proxy.RCProductPurchaseInfoProxy;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.RCPurchaseOrderItem;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCProductPurchaseInfoImpl.class)
public interface RCProductPurchaseInfo extends IModelObject {
  public abstract RCPurchaseOrderItem getOrderItem();
  
  public abstract RCProductPurchaseInfo setOrderItem(final RCPurchaseOrderItem orderItem);
  
  public abstract Date getInStockDate();
  
  public abstract RCProductPurchaseInfo setInStockDate(final Date inStockDate);
  
  public abstract Integer getInStockQuantity();
  
  public abstract RCProductPurchaseInfo setInStockQuantity(final Integer inStockQuantity);
  
  public abstract Date getDeliverDate();
  
  public abstract RCProductPurchaseInfo setDeliverDate(final Date deliverDate);
  
  public abstract Integer getDeliverQuantity();
  
  public abstract RCProductPurchaseInfo setDeliverQuantity(final Integer deliverQuantity);
  
  public abstract Collection<RCProductPurchaseInfoDeliverTarget> getDeliverTargets();
  
  public abstract RCProductPurchaseInfoDeliverTarget createAndAddtoDeliverTargets();
  
  public abstract RCProductPurchaseInfoDeliverTarget createAndAddtoDeliverTargets(final Procedure1<RCProductPurchaseInfoDeliverTarget> updater);
  
  public abstract RCProductPurchaseInfo removeFromDeliverTargets(final RCProductPurchaseInfoDeliverTarget rCProductPurchaseInfoDeliverTarget);
  
  public abstract RCProductPurchaseInfo removeAllDeliverTargets();
  
  public abstract void addDeliverTarget(final Integer quantity, final RCEnterprise deliverTarget);
  
  public abstract RCProjectMoney getDeliveredAmount();
  
  public abstract String getProductDesc();
  
  public abstract RCProductPurchaseInfoProxy toProxy();
}
